﻿using System.Collections.ObjectModel;
using WirelessAccessPoint.Core;

namespace WirelessAccessPoint.Model
{
    /// <summary>
    /// Hosted Networkの状態を表します。
    /// </summary>
    public class HostedNetworkContext : ModelBase
    {
        private HostedNetwork selectedHostedNetwork;
        private HostedNetwork activeHostedNetwork;
        private ObservableCollection<HostedNetworkPeer> hostedNetworkPeers;

        /// <summary>
        /// 選択されているHosted Networkを設定または取得します。
        /// </summary>
        public HostedNetwork SelectedHostedNetwork
        {
            get
            {
                if (this.selectedHostedNetwork == null)
                {
                    this.selectedHostedNetwork = new HostedNetwork();
                    this.OnPropertyChanged(() => this.SelectedHostedNetwork);
                }

                return this.selectedHostedNetwork;
            }
            set
            {
                if (value != this.selectedHostedNetwork)
                {
                    this.selectedHostedNetwork = value;
                    this.OnPropertyChanged(() => this.SelectedHostedNetwork);
                }
            }
        }

        /// <summary>
        /// 開始されているHosted Networkを設定または取得します。
        /// </summary>
        public HostedNetwork ActiveHostedNetwork
        {
            get
            {
                if (this.activeHostedNetwork == null)
                {
                    this.activeHostedNetwork = new HostedNetwork();
                    this.OnPropertyChanged(() => this.ActiveHostedNetwork);
                }

                return this.activeHostedNetwork;
            }
            set
            {
                if (value != this.activeHostedNetwork)
                {
                    this.activeHostedNetwork = value;
                    this.OnPropertyChanged(() => this.ActiveHostedNetwork);
                }
            }
        }

        /// <summary>
        /// Hosted Networkに接続されているPeerの一覧を取得します。
        /// </summary>
        public ObservableCollection<HostedNetworkPeer> HostedNetworkPeers
        {
            get
            {
                if (this.hostedNetworkPeers == null)
                {
                    this.hostedNetworkPeers = new ObservableCollection<HostedNetworkPeer>();
                    this.OnPropertyChanged(() => this.HostedNetworkPeers);
                }

                return this.hostedNetworkPeers;
            }
        }
    }
}
